package engine

/*
	scheduler负责分配worker in和out
	如何分发worker呢？
	首先worker的作用:接收请求 返回 result
	整体顺序
	1> scheduler中接收请求 Manage CrawlerRequest
	2> worker 返回新的result给engine
	3> engine再发送给scheduler
	4> scheduler 第一步 -> 提交。。。
*/
type Scheduler interface {
	SubmitReq(CrawlerRequest)              //发送
	CreateChanRequest(chan CrawlerRequest) //接收channel中的req
}

type ConcurrenceScheduler struct {
	WorkChannel chan CrawlerRequest
}

func (c *ConcurrenceScheduler) SubmitReq(request CrawlerRequest) {
	//发送请求给worker 的 channel (在engine中的 goworker)
	//容易 循环等待 卡住 所以需要开goroutine 去加快发送速度
	// c.WorkChannel <- request
	go func() {
		c.WorkChannel <- request
	}()
}
func (c *ConcurrenceScheduler) CreateChanRequest(r chan CrawlerRequest) {
	c.WorkChannel = r
}
